#pragma once

namespace Renderer
{
	class Camera
	{
	protected:
		float posX, posY, posZ;
		float rotX, rotY, rotZ;

		float startPosX, startPosY, startPosZ;
		float startRotX, startRotY, startRotZ;

		float endPosX, endPosY, endPosZ;
		float endRotX, endRotY, endRotZ;

		D3DXMATRIX worldMatrix;
		D3DXMATRIX translationMatrix;
		D3DXMATRIX rotationMatrix;

	public:
		Camera();

		D3DXMATRIX * GetMatrix();
		void Update();

		void Move(float posX, float posY, float posZ);
		void MoveRel(float addX, float addY, float addZ);

		void Rotate(float rotX, float rotY, float rotZ);
		void RotateRel(float addX, float addY, float addZ);

		void Point(float eyeX, float eyeY, float eyeZ, float atX, float atY, float atZ);

		void SetStartTrack();
		void SetEndTrack();

		void Track(float time, float duration);

		float GetXPos() const;
		float GetYPos() const;
		float GetZPos() const;
		float GetXRotation() const;
		float GetYRotation() const;
		float GetZRotation() const;
	};

}